import {
  IsNotEmpty,
  MaxLength,
  IsOptional,
  IsInt,
  Min,
  IsEnum,
} from 'class-validator';
import { Type } from 'class-transformer';
import { RegionLevelTypes } from '../type/region.level.type';
import { RegionStatusTypes } from '../type/region.status.type';

// 查询地区
export class RegionSearchDto {
  // id
  @IsOptional()
  @Type(() => Number)
  @IsNotEmpty({ message: 'id不能为空' })
  id: number;

  // 代码
  @IsOptional()
  @Type(() => String)
  @MaxLength(50, { message: '地区代码长度最长为 $constraint1' })
  code: string;

  // 名称
  @IsOptional()
  @Type(() => String)
  @MaxLength(20, { message: '名称长度最长为 $constraint1' })
  name: string;

  // 城市代码
  @IsOptional()
  @Type(() => String)
  @IsNotEmpty({ message: '城市代码不能为空' })
  @MaxLength(50, { message: '城市代码长度最长为 $constraint1' })
  city_code: string;

  // 地区级别
  @IsOptional()
  @Type(() => String)
  @IsEnum(RegionLevelTypes)
  level: string;

  // 状态
  @IsOptional()
  @Type(() => Number)
  @IsNotEmpty({ message: '状态不能为空' })
  @IsEnum(RegionStatusTypes)
  status: number;

  // 父id
  @IsOptional()
  @Type(() => Number)
  @IsNotEmpty({ message: '父id不能为空' })
  parent_id: number;

  // 页码（最小为1）
  @IsOptional()
  @Type(() => Number)
  @IsInt({ message: '页码需要为数字' })
  @Min(1, { message: '页码最小为 $constraint1' })
  page: number = 1;

  // 每页显示的条数（最小为10）
  @IsOptional()
  @Type(() => Number)
  @IsInt({ message: '显示条数需要为数字' })
  @Min(1, { message: '显示条数最小为 $constraint1' })
  limit: number = 10;
}
